package com.eltsistemas.os.controller.pessoa;

import org.hibernate.Session;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.eltsistemas.adapter.Adapter;
import com.eltsistemas.adapter.Calendario;
import com.eltsistemas.hibernate.HibernateUtil;
import com.eltsistemas.os.dao.pessoa.DepartamentoDao;
import com.eltsistemas.os.dao.pessoa.FuncionarioDao;
import com.eltsistemas.os.dao.veiculo.BuscaPorId;
import com.eltsistemas.os.modelo.pessoa.Departamento;
import com.eltsistemas.os.modelo.pessoa.Funcionario;

@Controller
@RequestMapping("/funcionario")
public class FuncionarioController {

	
	@RequestMapping("/adiciona")
	public String adiciona(Funcionario funcionario, String nomeDepartamento, String data)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		FuncionarioDao daoFuncionario = new FuncionarioDao(session);
		
		try
		{
			Long idDepartamento = new BuscaPorId(session).getId(nomeDepartamento, "Departamento");
			
			Departamento departamento = new Departamento();
			departamento.setId(idDepartamento);
			
			funcionario.setDepartamento(departamento);
			funcionario.setDataCadastro( new Calendario().getData(data) );
			daoFuncionario.adiciona(funcionario);
			session.close();
			return "redirect:lista";
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
			
	}
	
	@RequestMapping("/lista")
	public String lista(Model model, boolean valor)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		FuncionarioDao daoFuncionario = new FuncionarioDao(session);	
		DepartamentoDao daoDepartamento = new DepartamentoDao(session);
		
		model.addAttribute("funcionarios", daoFuncionario.lista());
		model.addAttribute("departamentos", daoDepartamento.lista());
		model.addAttribute("dataPadrao", new Calendario().getDataAtual());
		model.addAttribute("estados", new Adapter().getEstados());
		session.close();
		return "funcionario";
	}
	
	@RequestMapping("/alterado")
	public String alterar(Funcionario funcionario, String nomeDepartamento)
	{
		Session session = new HibernateUtil().getSession();
		session.beginTransaction();
		
		FuncionarioDao daoFuncionario = new FuncionarioDao(session);	
		
		try
		{
			Long idDepartamento = new BuscaPorId(session).getId(nomeDepartamento, "Departamento");
			
			Departamento departamento = new Departamento();
			departamento.setId(idDepartamento);
			
			funcionario.setDepartamento(departamento);
			daoFuncionario.altera(funcionario);
			session.close();
			return "redirect:lista";
		}
		catch(Exception e)
		{
			return "redirect:lista?valor=true";
		}
			
	}
	
	
	@RequestMapping("/remover")
	public String remover(Funcionario funcionario)
	{

		Session session = new HibernateUtil().getSession();
		session.beginTransaction();

		FuncionarioDao daoFuncionario = new FuncionarioDao(session);	
		daoFuncionario.remover( funcionario );
		
		session.close();
		
		return "redirect:lista";
	}
	

}
